
#include <iostream>
#include <string>
#include <vector>
#include <assert.h>

using std::cout;
using std::endl;
using std::cin;
using std::pair;
using std::make_pair;
using std::string;
using std::vector;

#include "RBTree.h"
#include "_map.h"
#include "_set.h"

//void testRBTree1()
//{
//    RBTree<int, int> t1;
//    vector<int> v = { 66,10,53,2,3443,7,6,26,26,45,72,1,61,77,56,99 };
//    for (size_t i = 0; i < v.size(); i ++ )
//    {
//        t1.insert(make_pair(v[i], i));
//        cout << v[i] << ':' << i << endl;
//        cout << "isRBTree" << ':' << t1.isRBTree() << endl;
//    }
//}

void testset()
{
    my_set::set<int> s;
    s.insert(6);
    s.insert(66);
    s.insert(77);
    s.insert(23);
    s.insert(2);
    s.insert(78);
    s.insert(34);
    s.insert(55);
    s.insert(19);
    s.insert(7);
    s.insert(9);
    s.insert(0);
    s.insert(33);

    for (auto& e : s)
    {
        cout << e << ' ';
    }
    cout << endl;

    my_set::set<int>::iterator it = s.begin();
    while (it != s.end())
    {
        cout << *it << ' ';
        ++ it;
    }
    cout << endl;
}

void testmap()
{
    string s[] = { "苹果", "香蕉", "苹果", "草莓", "西瓜", "苹果", "香蕉", "西瓜", "哈密瓜", "草莓", "哈密瓜", "哈密瓜" };
    my_map::map<string, int> m;
    for (auto& e : s)
    {
        m[e] ++ ;
    }

    my_map::map<string, int>::iterator it = m.begin();
    while (it != m.end())
    {
        cout << it->first << ':' << it->second << endl;
        ++ it;
    }
    cout << endl;
}

int main()
{
    //testRBTree1();
    
    testset();
    testmap();

    return 0;
}
